//package com.xxl.tool.core.old;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.text.DateFormat;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.time.format.DateTimeFormatter;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * date util
// *
// * @author xuxueli 2018-08-19 01:24:11
// */
//public class DateOldTool {
//    private static Logger logger = LoggerFactory.getLogger(DateOldTool.class);
//
//    // ---------------------- format parse ----------------------
//    private static final String DATE_FORMAT = "yyyy-MM-dd";
//    private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
//
//    private static final ThreadLocal<Map<String, DateFormat>> dateFormatThreadLocal = new ThreadLocal<Map<String, DateFormat>>();
//    private static DateFormat getDateFormat(String pattern) {
//        // valid
//        if (pattern==null || pattern.trim().length()==0) {
//            throw new IllegalArgumentException("pattern cannot be empty.");
//        }
//        // load DateFormat
//        Map<String, DateFormat> dateFormatMap = dateFormatThreadLocal.get();
//        if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){
//            return dateFormatMap.get(pattern);
//        }
//
//        // init
//        synchronized (dateFormatThreadLocal) {
//            if (dateFormatMap == null) {
//                dateFormatMap = new HashMap<String, DateFormat>();
//            }
//            dateFormatMap.put(pattern, new SimpleDateFormat(pattern));
//            dateFormatThreadLocal.set(dateFormatMap);
//        }
//
//        return dateFormatMap.get(pattern);
//    }
//
//    /**
//     * format datetime. like "yyyy-MM-dd"
//     *
//     * @param date
//     * @return
//     * @throws ParseException
//     */
//    public static String formatDate(Date date) {
//        DateTimeFormatter.ofPattern(DATE_FORMAT);
//
//        return format(date, DATE_FORMAT);
//    }
//
//    /**
//     * format date. like "yyyy-MM-dd HH:mm:ss"
//     *
//     * @param date
//     * @return
//     * @throws ParseException
//     */
//    public static String formatDateTime(Date date) {
//        return format(date, DATETIME_FORMAT);
//    }
//
//    /**
//     * format date
//     *
//     * @param date
//     * @param patten
//     * @return
//     * @throws ParseException
//     */
//    public static String format(Date date, String patten) {
//        return getDateFormat(patten).format(date);
//    }
//
//    /**
//     * parse date string, like "yyyy-MM-dd HH:mm:s"
//     *
//     * @param dateString
//     * @return
//     * @throws ParseException
//     */
//    public static Date parseDate(String dateString){
//        return parse(dateString, DATE_FORMAT);
//    }
//
//    /**
//     * parse datetime string, like "yyyy-MM-dd HH:mm:ss"
//     *
//     * @param dateString
//     * @return
//     * @throws ParseException
//     */
//    public static Date parseDateTime(String dateString) {
//        return parse(dateString, DATETIME_FORMAT);
//    }
//
//    /**
//     * parse date
//     *
//     * @param dateString
//     * @param pattern
//     * @return
//     */
//    public static Date parse(String dateString, String pattern) {
//        try {
//            return getDateFormat(pattern).parse(dateString);
//        } catch (Exception e) {
//            logger.warn("parse date error, dateString = {}, pattern={}; errorMsg = {}", dateString, pattern, e.getMessage());
//            return null;
//        }
//    }
//
//
//    // ---------------------- add date ----------------------
//
//    public static Date addYears(final Date date, final int amount) {
//        return add(date, Calendar.YEAR, amount);
//    }
//
//    public static Date addMonths(final Date date, final int amount) {
//        return add(date, Calendar.MONTH, amount);
//    }
//
//    public static Date addDays(final Date date, final int amount) {
//        return add(date, Calendar.DAY_OF_MONTH, amount);
//    }
//
//    public static Date addHours(final Date date, final int amount) {
//        return add(date, Calendar.HOUR_OF_DAY, amount);
//    }
//
//    public static Date addMinutes(final Date date, final int amount) {
//        return add(date, Calendar.MINUTE, amount);
//    }
//
//    public static Date addSeconds(final Date date, final int amount) {
//        return add(date, Calendar.SECOND, amount);
//    }
//
//    private static Date add(final Date date, final int calendarField, final int amount) {
//        if (date == null) {
//            return null;
//        }
//        final Calendar c = Calendar.getInstance();
//        c.setTime(date);
//        c.add(calendarField, amount);
//        return c.getTime();
//    }
//
//}